package com.hegaoye.account.service;

import com.hegaoye.core.base.BaseSV;
import com.hegaoye.account.entity.Account;
import com.hegaoye.account.entity.AccountState;

import java.util.List;

/**
 * 账户
 *
 * @author pi-top
 */
public interface AccountSV extends BaseSV<Account, Long> {

    /**
     * 查询账户
     *
     * @param account 编码
     * @return 用户
     */
    String load(String account);
    /**
     * 加载一个对象Account
     *
     * @param id id@param code 编码@param account 账户
     * @return Account
     */
    Account load(Long id, String code, String account);

    /**
     * 加载一个对象Account 通过id
     *
     * @param id id
     * @return Account
     */
    Account loadById(Long id);

    /**
     * 加载一个对象Account 通过code
     *
     * @param code 编码
     * @return Account
     */
    Account loadByCode(String code);

    /**
     * 加载一个对象Account 通过account
     *
     * @param account 账户
     * @return Account
     */
    Account loadByAccount(String account);

    /**
     * 根据主键id,oldStates 共同更新 Account 的状态到newState状态
     *
     * @param id id
     * @param newState 新状态
     * @param oldStates 旧状态集合
     */
    void updateStateById(Long id, AccountState newState, AccountState... oldStates);

    /**
     * 根据主键code,oldStates 共同更新 Account 的状态到newState状态
     *
     * @param code 编码
     * @param newState 新状态
     * @param oldStates 旧状态集合
     */
    void updateStateByCode(String code, AccountState newState, AccountState... oldStates);

    /**
     * 根据主键account,oldStates 共同更新 Account 的状态到newState状态
     *
     * @param account 账户
     * @param newState 新状态
     * @param oldStates 旧状态集合
     */
    void updateStateByAccount(String account, AccountState newState, AccountState... oldStates);

    /**
     * 根据主键account 更新 Account 的状态到另一个状态
     *
     * @param account 账户
     * @param state 状态
     */
    void updateByAccount(String account, AccountState state);

    /**
     * 根据主键id 更新 Account 的状态到另一个状态
     *
     * @param id id
     * @param state 状态
     */
    void updateById(Long id, AccountState state);

    /**
     * 根据主键code 更新 Account 的状态到另一个状态
     *
     * @param code 编码
     * @param state 状态
     */
    void updateByCode(String code, AccountState state);

    /**
     * 删除对象Account
     *
     * @param id id@param code 编码@param account 账户
     */
    void delete(Long id, String code, String account);

    /**
     * 查询Account分页
     *
     * @param accountObj 账户
     * @param offset 查询开始行
     * @param limit 查询行数
     * @return List<Account>
     */
    List<Account> list(Account accountObj, int offset, int limit);

    /**
     * 统计
     *
     * @param accountObj 账户信息
     * @return int
     */
    int count(Account accountObj);

    /**
     * 查询Account分页
     *
     * @param id id* @param code 编码* @param account 账户
     * @param offset 查询开始行
     * @param limit 查询行数
     * @return List<Account>
     */
    List<Account> list(Long id, String code, String account, int offset, int limit);

    /**
     * 根据条件统计
     *
     * @param id id
     * @param code 编码
     * @param account 账号
     * @return int
     */
    int count(Long id, String code, String account);

    /**
     * 根据账号和密码查询
     *
     * @param account 账号
     * @param password 密码
     * @return Account
     */
    Account loadByAccountAndPwd(String account, String password);
}
